home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 25 / AACD 25.iso / AACD / Magazine / Online / QMail / source / forward.c < prev    next >
Encoding:
C/C++ Source or Header  |  1997-04-15  |  1.5 KB  |  59 lines

  1. #include "sig.h"
  2. #include "readwrite.h"
  3. #include "exit.h"
  4. #include "env.h"
  5. #include "qmail.h"
  6. #include "stralloc.h"
  7. #include "subfd.h"
  8. #include "substdio.h"
  9.  
  10. void die_success() { _exit(0); }
  11. void die_perm(s) char *s; { substdio_putsflush(subfderr,s); _exit(100); }
  12. void die_temp(s) char *s; { substdio_putsflush(subfderr,s); _exit(111); }
  13. void die_nomem() { die_temp("forward: fatal: out of memory\n"); }
  14.  
  15. struct qmail qqt;
  16.  
  17. int mywrite(fd,buf,len) int fd; char *buf; int len;
  18. {
  19.  qmail_put(&qqt,buf,len);
  20.  return len;
  21. }
  22.  
  23. substdio ssin;
  24. substdio ssout;
  25. char inbuf[SUBSTDIO_INSIZE];
  26. char outbuf[16];
  27.  
  28. void main(argc,argv)
  29. int argc;
  30. char **argv;
  31. {
  32.  char *sender;
  33.  char *dtline;
  34.  
  35.  sig_pipeignore();
  36.  
  37.  sender = env_get("NEWSENDER");
  38.  if (!sender) die_perm("forward: fatal: NEWSENDER not set\n");
  39.  dtline = env_get("DTLINE");
  40.  if (!dtline) die_perm("forward: fatal: DTLINE not set\n");
  41.  
  42.  if (qmail_open(&qqt) == -1) die_temp("forward: fatal: unable to fork\n");
  43.  qmail_puts(&qqt,dtline);
  44.  substdio_fdbuf(&ssin,read,0,inbuf,sizeof(inbuf));
  45.  substdio_fdbuf(&ssout,mywrite,-1,outbuf,sizeof(outbuf));
  46.  if (substdio_copy(&ssout,&ssin) != 0)
  47.    die_temp("forward: fatal: error while reading message\n");
  48.  substdio_flush(&ssout);
  49.  
  50.  qmail_from(&qqt,sender);
  51.  while (*++argv) qmail_to(&qqt,*argv);
  52.  switch(qmail_close(&qqt))
  53.   {
  54.    case 0: die_success();
  55.    case QMAIL_TOOLONG: die_perm("forward: fatal: permanent qmail-queue error\n");
  56.    default: die_temp("forward: fatal: temporary qmail-queue error\n");
  57.   }
  58. }
  59.